home *** CD-ROM | disk | FTP | other *** search
/ ASME's Mechanical Engine…ing Toolkit 1997 December / ASME's Mechanical Engineering Toolkit 1997 December.iso / c_lang / tccurses.lzh / REFRESH.C < prev    next >
C/C++ Source or Header  |  1987-09-07  |  3KB  |  103 lines

  1. /****************************************************************/
  2. /* Wrefresh() and wnoutrefresh() routines of the PCcurses    */
  3. /* package                            */
  4. /*                                */
  5. /****************************************************************/
  6. /* This version of curses is based on ncurses, a curses version    */
  7. /* originally written by Pavel Curtis at Cornell University.    */
  8. /* I have made substantial changes to make it run on IBM PC's,    */
  9. /* and therefore consider myself free to make it public domain.    */
  10. /*        Bjorn Larsson (...mcvax!enea!infovax!bl)    */
  11. /****************************************************************/
  12. /* 1.0:    Release:                    870515    */
  13. /****************************************************************/
  14.  
  15. #include <curses.h>
  16. #include <curspriv.h>
  17.  
  18. /****************************************************************/
  19. /* Wrefresh() updates window win's area of the physical screen.    */
  20. /****************************************************************/
  21.  
  22. void wrefresh(win)
  23.   WINDOW    *win;
  24.   {
  25.   if (win == curscr)
  26.     curscr->_clear = TRUE;
  27.   else
  28.     wnoutrefresh(win);
  29.   doupdate();
  30.   } /* wrefresh */
  31.  
  32. /****************************************************************/
  33. /* Wnoutrefresh() updates the image of the desired screen,    */
  34. /* without doing physical update (copies window win's image to    */
  35. /* the _cursvar.tmpwin window, which is hidden from the user).    */
  36. /****************************************************************/
  37.  
  38. void wnoutrefresh(win)
  39.   register WINDOW    *win;
  40.   {
  41.   register int      *dst;            /* start destination in temp window */
  42.   register int    *end;            /* end destination in temp window */
  43.   register int    *src;            /* source in user window */
  44.   register int     first;        /* first changed char on line */
  45.   register int     last;        /* last changed char on line */
  46.   static   WINDOW *nscr;
  47.   static   int       begy;        /* window's place on screen */
  48.   static   int       begx;
  49.   static   int       i;
  50.   static   int       j;
  51.  
  52.   nscr = _cursvar.tmpwin;
  53.   begy = win->_begy;
  54.   begx = win->_begx;
  55.  
  56.   for (i=0, j=begy; i <= win->_maxy; i++, j++)
  57.     {
  58.     if (win->_minchng[i] != _NO_CHANGE)
  59.       {
  60.       first = win->_minchng[i];
  61.       last  = win->_maxchng[i];
  62.       dst   = &(nscr->_line[j][begx + first]);
  63.       end   = &(nscr->_line[j][begx + last]);
  64.       src   = &(win->_line[i][first]);
  65.  
  66.       while (dst <= end)         /* copy user line to temp window */
  67.     *dst++ = *src++;
  68.  
  69.       first += begx;            /* nscr's min/max change positions */
  70.       last  += begx;
  71.  
  72.       if ((nscr->_minchng[j] == _NO_CHANGE)||(nscr->_minchng[j] > first))
  73.     nscr->_minchng[j] = first;
  74.       if (last > nscr->_maxchng[j])
  75.     nscr->_maxchng[j] = last;
  76.       
  77.       win->_minchng[i] = _NO_CHANGE;    /* updated now */
  78.       } /* if */
  79.     win->_maxchng[i] = _NO_CHANGE;    /* updated now */
  80.     } /* for */
  81.  
  82.   if (win->_clear)
  83.     {
  84.     win->_clear = FALSE;
  85.     nscr->_clear = TRUE;
  86.     } /* if */
  87.  
  88.   if (!win->_leave)
  89.     {
  90.     nscr->_cury = win->_cury + begy;
  91.     nscr->_curx = win->_curx + begx;
  92.     } /* if */
  93.   } /* wnoutrefresh */
  94.  
  95. /****************************************************************/
  96. /* Refresh() updates stdscr's area of the physical screen.    */
  97. /****************************************************************/
  98.  
  99. void refresh()
  100.   {
  101.   wrefresh(stdscr);
  102.   } /* refresh */
  103.